package com.gftBrazil.BankSystem.controller.cliente;

import com.gftBrazil.BankSystem.bean.ClienteBean;
import com.gftBrazil.BankSystem.bean.enums.Permissao;
import com.gftBrazil.BankSystem.business.ClienteBusiness;
import com.gftBrazil.BankSystem.exceptions.AcessoNegadoException;
import com.gftBrazil.BankSystem.exceptions.PreenchimentoObrigatorioException;
import com.gftBrazil.BankSystem.sistema.Sessao;
import com.gftBrazil.BankSystem.util.Ambiente;
import com.gftBrazil.BankSystem.util.Sucess;
import com.gftBrazil.BankSystem.util.Validador;
import com.gftBrazil.BankSystem.view.ClienteView;
import javax.swing.JOptionPane;

/**
 *
 * @author JRSS
 */
public class ClienteJuridicoController extends ClienteController {

    private final Permissao permissao;

    public ClienteJuridicoController(Permissao permissao) throws AcessoNegadoException {
        this.permissao = permissao;
        Sessao.getInstance().validarAcesso(this.permissao);
    }

    @Override
    public void salvar(ClienteView clienteView) {
        ClienteBusiness.setCliente(getCliente());
        try {
            Validador.validarPreenchimentoObrigatorio(clienteView.getComponentes());
            Sucess sucess = ClienteBusiness.getInstance().cadastrarCliente(getCliente());
            clienteView.setMensagem(sucess.getMessage());
        } catch (PreenchimentoObrigatorioException ex) {
            clienteView.setMensagem("");
            JOptionPane.showInternalMessageDialog(Ambiente.getInstance().getDesktopPane(),
                    ex,
                    "Erro",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    @Override
    public void consultar(Integer codigoCliente, ClienteView clienteView) {
        ClienteBean c = ClienteBusiness.getInstance().consultarClientePorCodigo(codigoCliente);
        clienteView.setCliente(c);
    }

    @Override
    public void bloquear(ClienteView clienteView) {
        try {
            int codigoCliente = Integer.parseInt(clienteView.getComponentes().get(0).getText());
            Validador.validarPreenchimentoObrigatorio(clienteView.getComponentes());
            ClienteBean cliente = ClienteBusiness.getInstance().consultarClientePorCodigo(codigoCliente);
            Sucess sucess = ClienteBusiness.getInstance().bloquear(cliente);
            clienteView.setMensagem(sucess.getMessage());
        } catch (PreenchimentoObrigatorioException ex) {
            clienteView.setMensagem("");
            JOptionPane.showInternalMessageDialog(Ambiente.getInstance().getDesktopPane(),
                    ex,
                    "Erro",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    @Override
    public void cancelar(ClienteView clienteView) {
        try {
            int codigoCliente = clienteView.getCliente().getCodigoCliente();
            Validador.validarPreenchimentoObrigatorio(clienteView.getComponentes());
            ClienteBean c = ClienteBusiness.getInstance().consultarClientePorCodigo(codigoCliente);
            Sucess sucess = ClienteBusiness.getInstance().cancelar(c);
            clienteView.setMensagem(sucess.getMessage());
        } catch (PreenchimentoObrigatorioException ex) {
            clienteView.setMensagem("");
            JOptionPane.showInternalMessageDialog(Ambiente.getInstance().getDesktopPane(),
                    ex,
                    "Erro",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    @Override
    public void reativar(ClienteView clienteView) {
        try {
            int codigoCliente = clienteView.getCliente().getCodigoCliente();
            Validador.validarPreenchimentoObrigatorio(clienteView.getComponentes());
            ClienteBean c = ClienteBusiness.getInstance().consultarClientePorCodigo(codigoCliente);
            Sucess sucess = ClienteBusiness.getInstance().reativar(c);
            clienteView.setMensagem(sucess.getMessage());
        } catch (PreenchimentoObrigatorioException ex) {
            clienteView.setMensagem("");
            JOptionPane.showInternalMessageDialog(Ambiente.getInstance().getDesktopPane(),
                    ex,
                    "Erro",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

    @Override
    public void visualizar(ClienteView clienteView, ClienteBean c, boolean novo) {
        clienteView = new ClienteView(novo, c);
        Ambiente.getInstance().getDesktopPane().add(clienteView);
        clienteView.setVisible(true);
        clienteView.toFront();
    }

    @Override
    public Permissao getPermissao() {
        return this.permissao;
    }

}
